/*!
 * \file weblogic_parse.c
 *
 * \brief weblogic 数据包解析
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.\n
 *
 * \version 3.0
 * \author wuwk
 * \date 2016/01/22
 *
 */

#include <stdio.h>

#include "corba_comm.h"
#include "frcomm.h"
#include "frbyte_buffer.h"
#include "frreport_comm.h"
#include "weblogic_ejb.h"
#include "weblogic_jms.h"
#include "weblogic_parse.h"

/*!
 * iiop weblogic stub data 请求解析
 *
 * \param *p_st_private        (L7session_corba_private  私有数据)
 * \param *p_st_data           (Frbyte_Packet         数据)
 * \param *p_st_body_data      (Frreport_body_data    上报数据)
 *
 * \return FR_SUCC:成功\n
 *         FR_FAIL:失败\n
 *
 */
int weblogic_stub_data_parse_req(corba_session *p_st_session_private
                               , Frbyte_Packet *p_st_data
                               , Frreport_body_data *p_st_body_data)
{
    int i_ret = 0;

    if (p_st_session_private == NULL || p_st_data == NULL || p_st_body_data == NULL)
        return FR_FAIL;

    if (p_st_session_private->is_wls_ejb == 1)
    {
        i_ret = weblogic_ejb_parse_req(p_st_session_private, p_st_body_data);
    }
    else if (p_st_session_private->is_wls_jms == 1)
    {
        i_ret = weblogic_jms_parse_req(p_st_session_private, p_st_data, p_st_body_data);
    }

    return i_ret;
}

/*!
 * iiop weblogic stub data 响应解析
 *
 * \param *p_st_private        (L7session_corba_private  私有数据)
 * \param *p_st_data           (Frbyte_Packet         数据)
 * \param *p_st_body_data      (Frreport_body_data    上报数据)
 *
 * \return FR_SUCC:成功\n
 *         FR_FAIL:失败\n
 *
 */
int weblogic_stub_data_parse_resp(corba_session *p_st_session_private
                                , Frbyte_Packet *p_st_data
                                , Frreport_body_data *p_st_body_data)
{
    int i_idx = 0;
    int i_ret = 0;

    if (p_st_session_private == NULL || p_st_data == NULL || p_st_body_data == NULL)
        return FR_FAIL;

    if (bytebuff_memstr(p_st_data, bytebuff_getPosition(p_st_data), 0, WEBLOGIC_EJB_REMOTEPROXY, strlen(WEBLOGIC_EJB_REMOTEPROXY), &i_idx) == FR_SUCC
        || p_st_session_private->is_wls_ejb == 1)
    {
        // ejb
        i_ret = weblogic_ejb_parse_resp(p_st_session_private, p_st_data, p_st_body_data);
    }
    else if (bytebuff_memstr(p_st_data, bytebuff_getPosition(p_st_data), 0, WEBLOGIC_JMS_CONNFACTORY, strlen(WEBLOGIC_JMS_CONNFACTORY), &i_idx) == FR_SUCC
        || bytebuff_memstr(p_st_data, bytebuff_getPosition(p_st_data), 0, WEBLOGIC_JMS_PUSHREQUEST, strlen(WEBLOGIC_JMS_PUSHREQUEST), &i_idx) == FR_SUCC
        || p_st_session_private->is_wls_jms == 1)
    {
        // IIOP JMS
        i_ret = weblogic_jms_parse_resp(p_st_session_private, p_st_data, p_st_body_data);
    }

    return i_ret;
}

